package com.demo.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.demo.enums.Sex;
import com.demo.function.mybatis.typehandler.DateTypeHandler;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 数据表实体类。
 * 字段使用typeHandler，必须在实体类添加@TableName注解并设置autoResultMap=true，否则查询会报错
 * @author cyj
 */
@TableName(value = "user", autoResultMap = true)
@Data
@Accessors(chain = true)
public class User implements Serializable {

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String userName;

    /**
     * 性别
     */
    private Sex sex;

    /**
     * 创建时间，数据库字段类型是bigint，通过自定义typeHandler进行类型转换
     */
    @TableField(typeHandler = DateTypeHandler.class)
    private Date createTime;

    /**
     * 需要指定typerHandler将JSON转换为对象
     * 目前只FastjsonTypeHandler只支持转换对象，不支持转换List集合
     * JacksonTypeHandler即能转换对象，也能转换List集合
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Address> address;

    /**
     * 权限，多个权限用逗号分割
     */
    private String permissions;
}